package cn.kgc.pojo;

import cn.kgc.util.Contants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements HttpSessionBindingListener {

    private Integer id;
    private String userName;
    private String password;
    private String email;
    private Integer userType;

    /**
     * 创建对象，放到session中  触发这个方法
     * @param httpSessionBindingEvent
     */
    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("==================绑定，进入了监听器=====================");
        //1.获取ServletContext中当前系统在线人数
        ServletContext ctx= httpSessionBindingEvent.getSession().getServletContext();

        //2.如果在线人数为null 或者0 ，则给一个初始值为1
       Integer  count= (Integer) ctx.getAttribute(Contants.ONLINE_COUNT);
        if(count==null||count==0){
            //表示这个系统第一个用户登录
            count=1;
        } else{
            //3.否则，增加1； 放到ServletContext中保存起来
            count++;
        }
        ctx.setAttribute(Contants.ONLINE_COUNT,count);
    }



    /**
     * 创建对象，当对象在session中失效的时候触发这个方法：
     * 1. session过期   2.session.invalid(); 3.session.removeAttribue("key");
     * @param httpSessionBindingEvent
     */
    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("==================解绑，退出了监听器=====================");
        //1.获取ServletContext中当前系统在线人数
        ServletContext ctx= httpSessionBindingEvent.getSession().getServletContext();

        //2.减1； 放到ServletContext中保存起来
        Integer  count= (Integer) ctx.getAttribute(Contants.ONLINE_COUNT);
        count--;
        ctx.setAttribute(Contants.ONLINE_COUNT,count);
    }
}
